import { BrowserWindow, ipcMain } from 'electron';
import { initialize, enable } from "@electron/remote/main";
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";

initialize(); // 初始化 @electron/remote/main
export let mainWindow = null
export const createMainWindow = async (callback) => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    resizable: true, // 窗口是否可以改变尺寸
    frame: false, // 设置为 false 时可以创建一个无边框窗口 默认值为 true 且不能拖动
    titleBarStyle: "hidden", // default hidden 与 titleBarOverlay使用有其他效果
    // transparent: true, // 使窗口透明 默认值为 false， 在Windows上，仅在无边框窗口下起作用。
    // titleBarStyle:'hiddenInset',
    // titleBarOverlay: true,
    titleBarOverlay: {
      color: "#f4f4f4",
      symbolColor: "#EB8706",
      height: 40,
    },
    show: true, /// 是否显示窗口 配合 'ready-to-show' 事件使用
    webPreferences: {
      nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, // 是否支持开启node， 默认false  需与 contextIsolation 配合使用
      contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION, // 是否开启上下文隔离， 默认true
      // devTools: false,
    },
  });
  enable(mainWindow.webContents);
  wacthRendererMsg()
  callback()
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
    // if (!process.env.IS_TEST) mainWindow.webContents.openDevTools();
  } else {
    createProtocol("app");
    mainWindow.loadURL("app://./index.html");
  }
  // 
  // 页面加载完成显示窗口
  mainWindow.once('ready-to-show', () => {
    // 改变窗口位置
    // mainWindow.setBounds({
    //   x: 100,
    //   y: 100,
    // })
    // mainWindow.setPosition(100, 100)
    mainWindow.show()
  })
  // 显示窗口时触发
  mainWindow.on('show', () => {
    // 窗口最大化
    // mainWindow.maximize()
    // 窗口最小化
    // mainWindow.minimize()
    // 窗口关闭
    // mainWindow.close()
  })
}

const wacthRendererMsg = () => {
  // 监听渲染进程给主进程发送消息
  ipcMain.on("ipc-send", (e, args) => {
    console.log(args);
    // 回复渲染进程消息
    e.reply('ipc-reply', 'reply: hello ipcRenderer')
    return
  });
  ipcMain.on('app-move', (e, args) => {
    mainWindow && mainWindow.setPosition(args.x, args.y)
  })
}